package task1;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 编程统计字符串"ABCD123!@#$%ab"中的大写字母、小写字母、数字、其他字符的个数并打印出来
 */
public class StatisticTest {
    public static void main(String[] args) {
        // 1.定义要统计的字符串
        String string = "ABCD123!@#$%ab";
        // 2.调用statistic方法进行统计，返回一个HashMap
        HashMap<String,Integer> hashMap = statistic(string);
        // 3.对HashMap中的内容进行打印
        show(hashMap);

    }

    private static void show(HashMap<String, Integer> hashMap) {
        // 遍历HashMap并打印
        Set<Map.Entry<String,Integer>> sets = hashMap.entrySet();
        for (Map.Entry<String,Integer> set:sets) {
            System.out.println(set.getKey() + ": " + set.getValue());
        }
    }

    // 对输入字符串进行大写字母、小写字母、数字、其他字符进行统计
    private static HashMap<String, Integer> statistic(String string) {
        HashMap<String,Integer> hashMap = new HashMap<>();
        // 先在hashMap中插入四种情况,初始统计情况为0
        hashMap.put("大写字母",0);
        hashMap.put("小写字母",0);
        hashMap.put("数字",0);
        hashMap.put("其他字符",0);
        // 将String字符串转换为char数组，用于遍历每个字符
        char[] chars = string.toCharArray();
        // 遍历每个字符，利用ASCII值进行判断
        for (char c:chars) {
            // 判断当前字符是否为大写字母
            if (c >= 'A' && c <= 'Z')
                hashMap.put("大写字母",hashMap.get("大写字母") + 1);
            // 判断当前字符是否为小写字母
            else if (c >= 'a' && c <= 'z')
                hashMap.put("小写字母",hashMap.get("小写字母") + 1);
            // 判断当前字符是否为数字
            else if (c >= '0' && c <= '9')
                hashMap.put("数字",hashMap.get("数字") + 1);
            // 如果不是上述三种情况，则为其他字符
            else
                hashMap.put("其他字符",hashMap.get("其他字符") + 1);
        }
        return hashMap;
    }
}
